<!DOCTYPE html>
<html xmlns="http://www.w3.org/1999/xhtml" xml:lang="en-us" lang="en-us">
<head>
  <link href="https://gmpg.org/xfn/11" rel="profile">
  <meta http-equiv="content-type" content="text/html; charset=utf-8">
  <meta name="generator" content="Hugo 0.68.3" />

  
  <meta name="viewport" content="width=device-width, initial-scale=1.0">

  <title>第五篇文章 &middot; 我的博客</title>
  <meta name="description" content="" />

  
  <link type="text/css" rel="stylesheet" href="/my_technology_blog/css/print.css" media="print">
  <link type="text/css" rel="stylesheet" href="/my_technology_blog/css/poole.css">
  <link type="text/css" rel="stylesheet" href="/my_technology_blog/css/syntax.css">
  <link type="text/css" rel="stylesheet" href="/my_technology_blog/css/hyde.css">
    <link rel="stylesheet" href="https://fonts.googleapis.com/css?family=Abril+Fatface|PT+Sans:400,400i,700">


  
  <link rel="apple-touch-icon-precomposed" sizes="144x144" href="/apple-touch-icon-144-precomposed.png">
  <link rel="shortcut icon" href="/favicon.png">

  
  
</head>

  <body class="theme-base-0self ">
  <aside class="sidebar">
  <div class="container sidebar-sticky">
    <div class="sidebar-about">
      <a href="/my_technology_blog/"><h1>我的博客</h1></a>
      <p class="lead">
       这里是田帅康的个人博客 
      </p>
    </div>

    <nav>
      <ul class="sidebar-nav">
        <li><a href="/my_technology_blog/">Home</a> </li>
        
      </ul>
    </nav>

    <p>&copy; 2020. All rights reserved. </p>
  </div>
</aside>

    <main class="content container">
    <div class="post">
  <h1>第五篇文章</h1>
  <time datetime=2020-04-09T00:00:00Z class="post-date">Thu, Apr 9, 2020</time>
  <h3 id="django模型关系onetoonefield一对一">Django模型关系OneToOneField（一对一）</h3>
<p> 数据库中的数据表之间的关系包括一对一，一对多，多对多，它们分别使用关键字OneToOneField,ForeignKey,ManyToManyFiled进行定义，之前已经写了一对多，多对多介绍以及使用，准备再找一个时间写一下它们之间的一个区别，这三种关系中比较让你不好理解的可能就是一对一和一对多的区别了，暂时按下不表</p>
<p>首先还是举一个比较常见的一对一的关系：银行账户(Account)和联系人(Contact)，一个银行账户对应一个联系人，而一个联系人也只对应一个账户</p>
<p>在models.py创建数据模型：
<img src="/my_technology_blog/1.png" alt="模型图片">
     这里创建了两个数据模型一个是Account(账户）里面包含三个属性username,password,register_date，另外一个是Contact（联系人）包含了四个属性，address(联系人地址)，code(邮编)，mobile(联系人手机)以及关联两张表的外键account</p>
<p>OneToOneField的第一个参数是被关联的模型的名称，第二个参数表示级联删除，这个已经在之前的博客里面讲过了，当Account数据表里面的数据被删除后Contact里面的数据也随着被删除
接下来执行数据迁移命令，并查看sql语句：</p>
<p><img src="/my_technology_blog/2.png" alt="sql语句"><br>
那么一对一关系中如何进行对数据的操作，现在在python  shell中进行演示：<br>
这里主要进行的数据的添加和在一对一关系中如何正向查询和反向查询<br>
数据添加操作:</p>
<pre><code>  from blog.models import Account,Contact

     a1 = Account.objects.create(username='leeyongbard',password='123')

     a1.save()

    c1 = Contact.objects.create(address='zh',code='45000',mobile='15735896033',account=a1)

    c1.save()
</code></pre><p>数据表如下:</p>
<p><img src="/my_technology_blog/3.png" alt="表结构"><br>
查询操作：<br>
正向查询：通过账户查询对应的联系人的信息</p>
<pre><code> a1.contact.address
 a1.contact.code
</code></pre><p><img src="/my_technology_blog/4.png" alt="查询语句">
反向查询通过联系人查询账户信息：</p>
<p><img src="/my_technology_blog/5.png" alt="用户信息"><br>
删除操作:<br>
删除账户信息，则对应的联系人信息也会被删除:<br>
a1.contact.delete()</p>

</div>


    </main>

    
      
    
  </body>
</html>
